跳到主要内容

实验三 3-8译码器

数字电路中3-8译码器在理解数制与码制的概念中起了十分重要的作用,本例程实现了利用三个拨码开关作为输入,8个LED作为输出的3-8译码器。在这个实验里我们将学习如何用Verilog来实现组合逻辑。

1. 硬件说明

组合逻辑电路是数字电路的重要部分,电路的输出只与输入的当前状态相关的逻辑电路,常见的有选择器、比较器、译码器、编码器、编码转换等等。在本实验里以最常见的3-8译码器为例说明如何用Verilog实现。3-8译码器的真值表如下:

alt text
图3-1 3-8译码器真值表

从前面的实验可以知道,当FPGA输出信号到LED为高电平时LED熄灭,反之LED变亮。同时我们可以以开关的信号模拟3-8译码器的输入,这样控制开关我们就能控制特定的LED变亮。 

2. Verilog代码

module decode38 (sw,led);

input [2:0] sw; //开关输入信号,利用了其中3个开关作为3-8译码器的输入
output [7:0] led; //输出信号控制特定LED
//定义led为reg型变量,在always过程块中只能对reg型变量赋值
reg [7:0] led;

//always过程块,括号中sw为敏感变量,当sw变化一次执行一次always中所有语句,否则保持不变
always @ (sw)
begin
case(sw) //case语句,一定要跟default语句
//条件跳转,其中“_”下划线为了阅读方便,无实际意义
//位宽'进制+数值是Verilog里常数的表达方法,进制可//以是b、o、d、h(二、八、十、十六进制)
3'b000: led=8'b0111_1111;
3'b001: led=8'b1011_1111;
3'b010: led=8'b1101_1111;
3'b011: led=8'b1110_1111;
3'b100: led=8'b1111_0111;
3'b101: led=8'b1111_1011;
3'b110: led=8'b1111_1101;
3'b111: led=8'b1111_1110;
default: ;
endcase
end
endmodule

3. 引脚分配

综合(synthesize)完成之后一定要配置FPGA的引脚到相应的外设,这样下载FPGA程序后才能达到我们想要的效果。

信号名称分配管脚信号名称分配管脚
LED[0]N13SW[0]M7
LED[1]M12SW[1]M8
LED[2]P12SW[2]M9
LED[3]M11
LED[4]P11
LED[5]N10
LED[6]N9
LED[7]P9

下载完程序后就可以实现3个开关控制不同LED灯的显示,3-8译码器完成。

4. 小结

实现了一个简单的组合逻辑3-8译码器,在下一个数码管显示实验我们将学习如何通过译码实现控制数码管的显示。